library(tidyverse)
library(cowplot)
library(maps)
library(ggforce)
library(viridis)
studies <- read_csv("../data/studies_gsheet.csv")
sites <- read_csv("../data/sites_gsheet.csv")
df <- studies %>%
group_by(site) %>%
summarise(Nstudies = n_distinct(studyID)) %>%
left_join(sites)
Joining, by = "site"
world <- map("world", plot = FALSE, fill = TRUE) %>% fortify()
# sanity check that coordinates are in the right country
# within a country, all Xs should be the same color
ggplot(df, aes(x = long, y = lat)) +
geom_polygon(data = world, aes(group = group), col = "black", fill = "grey90") +
geom_point(aes(col = country), size = 5, shape = 4, stroke = 2, alpha = .8) +
coord_fixed(1.3, ylim = c(-55, 83.59961)) +
scale_color_viridis_d() +
theme_map() +
guides(col = "none")

ggsave("../graphs/map.pdf", width = 20, height = 10, scale = 2)
m <- ggplot(df, aes(x = long, y = lat)) +
geom_polygon(data = world, aes(group = group), fill = "grey90") +
geom_point(aes(size = Nstudies, fill = Nstudies), shape = 21, alpha = .8) +
scale_size_area("Number of\nStudies", max_size = 15) +
scale_fill_viridis_c("Number of\nStudies") +
theme_map() +
guides(size = "none")
legend <- get_legend(m)
Removed 2 rows containing missing values (geom_point).
mx <- m +
annotate("rect", ymin = c(24, 31, 24), ymax = c(46, 61, 50), xmin = c(124, -12, -130),
xmax = c(146, 32, -64), size = .5, col = "grey", fill = NA) +
coord_fixed(1.3, ylim = c(-55, 83.59961)) +
theme(legend.position = "none")
Zoom in on sections
# japan
m1 <- m +
geom_polygon(data = world, aes(group = group), col = "black", fill = "grey90", lwd = .2) +
geom_point(aes(size = Nstudies, fill = Nstudies), shape = 21, alpha = .8) +
coord_fixed(1.3, ylim = c(25, 45), xlim = c(125, 145)) +
theme(legend.position = "none") +
panel_border(color = "grey", size = .5)
# europe
m2 <- m +
geom_polygon(data = world, aes(group = group), col = "black", fill = "grey90", lwd = .2) +
geom_point(aes(size = Nstudies, fill = Nstudies), shape = 21, alpha = .8) +
coord_fixed(1.3, ylim = c(32, 60), xlim = c(-10, 30)) +
theme(legend.position = "none") +
panel_border(color = "grey", size = .5)
# contiguous us
usa = map("state", plot = FALSE, fill = TRUE) %>% fortify() # "usa"
m3 <- m +
geom_polygon(data = world, aes(group = group), col = "black", fill = "grey90", lwd = .2) +
geom_polygon(data = usa, aes(group = group), col = "black", fill = "grey90", lwd = .2) +
geom_point(aes(size = Nstudies, fill = Nstudies), shape = 21, alpha = .8) +
coord_fixed(1.3, ylim = c(25, 49), xlim = c(-127, -67)) +
theme(legend.position = "none") +
panel_border(color = "grey", size = .5)
bottom_row <- plot_grid(m3, m2, m1, legend, nrow = 1, rel_widths = c(2, 1.18, .85, .5))
Removed 2 rows containing missing values (geom_point).Removed 2 rows containing missing values (geom_point).Removed 2 rows containing missing values (geom_point).Removed 2 rows containing missing values (geom_point).Removed 2 rows containing missing values (geom_point).Removed 2 rows containing missing values (geom_point).
plot_grid(mx, bottom_row, ncol = 1, rel_heights = c(2.4, 1)) +
theme(plot.margin = unit(c(.5, .5, 1.5, .5), "cm"))
Removed 2 rows containing missing values (geom_point).

ggsave("../graphs/map_insets.pdf", width = 8, height = 5.5, scale = 2)
Session Info
sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Mojave 10.14.5
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] viridis_0.5.1 viridisLite_0.3.0 ggforce_0.3.1 maps_3.3.0 cowplot_1.0.0
[6] forcats_0.4.0 stringr_1.4.0 dplyr_0.8.3 purrr_0.3.2 readr_1.3.1
[11] tidyr_1.0.0 tibble_2.1.3 ggplot2_3.2.1 tidyverse_1.2.1
loaded via a namespace (and not attached):
[1] tidyselect_0.2.5 xfun_0.10 haven_2.1.1 lattice_0.20-38 colorspace_1.4-1
[6] vctrs_0.2.0 generics_0.0.2 rlang_0.4.0 pillar_1.4.2 glue_1.3.1
[11] withr_2.1.2 tweenr_1.0.1 modelr_0.1.5 readxl_1.3.1 lifecycle_0.1.0
[16] munsell_0.5.0 gtable_0.3.0 cellranger_1.1.0 rvest_0.3.4 labeling_0.3
[21] knitr_1.25 broom_0.5.2 Rcpp_1.0.2 scales_1.0.0 backports_1.1.5
[26] jsonlite_1.6 farver_1.1.0 gridExtra_2.3 digest_0.6.21 hms_0.5.1
[31] stringi_1.4.3 polyclip_1.10-0 grid_3.6.1 cli_1.1.0 tools_3.6.1
[36] magrittr_1.5 lazyeval_0.2.2 crayon_1.3.4 pkgconfig_2.0.3 zeallot_0.1.0
[41] MASS_7.3-51.4 xml2_1.2.2 lubridate_1.7.4 assertthat_0.2.1 httr_1.4.1
[46] rstudioapi_0.10 R6_2.4.0 nlme_3.1-141 compiler_3.6.1
LS0tCnRpdGxlOiAiU2l0ZXMiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgY3NzOiBzdHlsZS5jc3MKICAgIHRoZW1lOiBwYXBlcgotLS0KCmBgYHtyIHNldHVwLCBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KG1hcHMpCmxpYnJhcnkoZ2dmb3JjZSkKbGlicmFyeSh2aXJpZGlzKQpgYGAKCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQpzdHVkaWVzIDwtIHJlYWRfY3N2KCIuLi9kYXRhL3N0dWRpZXNfZ3NoZWV0LmNzdiIpCnNpdGVzIDwtIHJlYWRfY3N2KCIuLi9kYXRhL3NpdGVzX2dzaGVldC5jc3YiKQpgYGAKCmBgYHtyfQpkZiA8LSBzdHVkaWVzICU+JSAKICBncm91cF9ieShzaXRlKSAlPiUgCiAgc3VtbWFyaXNlKE5zdHVkaWVzID0gbl9kaXN0aW5jdChzdHVkeUlEKSkgJT4lIAogIGxlZnRfam9pbihzaXRlcykKYGBgCgpgYGB7cn0Kd29ybGQgPC0gbWFwKCJ3b3JsZCIsIHBsb3QgPSBGQUxTRSwgZmlsbCA9IFRSVUUpICU+JSBmb3J0aWZ5KCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTIwLCBmaWcuaGVpZ2h0PTEwLCBjYWNoZT1UUlVFfQojIHNhbml0eSBjaGVjayB0aGF0IGNvb3JkaW5hdGVzIGFyZSBpbiB0aGUgcmlnaHQgY291bnRyeQojIHdpdGhpbiBhIGNvdW50cnksIGFsbCBYcyBzaG91bGQgYmUgdGhlIHNhbWUgY29sb3IKZ2dwbG90KGRmLCBhZXMoeCA9IGxvbmcsIHkgPSBsYXQpKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSB3b3JsZCwgYWVzKGdyb3VwID0gZ3JvdXApLCBjb2wgPSAiYmxhY2siLCBmaWxsID0gImdyZXk5MCIpICsKICBnZW9tX3BvaW50KGFlcyhjb2wgPSBjb3VudHJ5KSwgc2l6ZSA9IDUsIHNoYXBlID0gNCwgc3Ryb2tlID0gMiwgYWxwaGEgPSAuOCkgKwogIGNvb3JkX2ZpeGVkKDEuMywgeWxpbSA9IGMoLTU1LCA4My41OTk2MSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2QoKSArCiAgdGhlbWVfbWFwKCkgKwogIGd1aWRlcyhjb2wgPSAibm9uZSIpCmBgYAoKYGBge3J9Cmdnc2F2ZSgiLi4vZ3JhcGhzL21hcC5wZGYiLCB3aWR0aCA9IDIwLCBoZWlnaHQgPSAxMCwgc2NhbGUgPSAyKQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD00fQptIDwtIGdncGxvdChkZiwgYWVzKHggPSBsb25nLCB5ID0gbGF0KSkgKwogIGdlb21fcG9seWdvbihkYXRhID0gd29ybGQsIGFlcyhncm91cCA9IGdyb3VwKSwgZmlsbCA9ICJncmV5OTAiKSArCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IE5zdHVkaWVzLCBmaWxsID0gTnN0dWRpZXMpLCBzaGFwZSA9IDIxLCBhbHBoYSA9IC44KSArCiAgc2NhbGVfc2l6ZV9hcmVhKCJOdW1iZXIgb2ZcblN0dWRpZXMiLCBtYXhfc2l6ZSA9IDE1KSArCiAgc2NhbGVfZmlsbF92aXJpZGlzX2MoIk51bWJlciBvZlxuU3R1ZGllcyIpICsKICB0aGVtZV9tYXAoKSArCiAgZ3VpZGVzKHNpemUgPSAibm9uZSIpCgpsZWdlbmQgPC0gZ2V0X2xlZ2VuZChtKQoKbXggPC0gbSArCiAgYW5ub3RhdGUoInJlY3QiLCB5bWluID0gYygyNCwgMzEsIDI0KSwgeW1heCA9IGMoNDYsIDYxLCA1MCksIHhtaW4gPSBjKDEyNCwgLTEyLCAtMTMwKSwgCiAgICAgICAgICAgeG1heCA9IGMoMTQ2LCAzMiwgLTY0KSwgc2l6ZSA9IC41LCBjb2wgPSAiZ3JleSIsIGZpbGwgPSBOQSkgKyAKICBjb29yZF9maXhlZCgxLjMsIHlsaW0gPSBjKC01NSwgODMuNTk5NjEpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpgYGAKCiMjIFpvb20gaW4gb24gc2VjdGlvbnMKCmBgYHtyfQojIGphcGFuCm0xIDwtIG0gKyAKICBnZW9tX3BvbHlnb24oZGF0YSA9IHdvcmxkLCBhZXMoZ3JvdXAgPSBncm91cCksIGNvbCA9ICJibGFjayIsIGZpbGwgPSAiZ3JleTkwIiwgbHdkID0gLjIpICsKICBnZW9tX3BvaW50KGFlcyhzaXplID0gTnN0dWRpZXMsIGZpbGwgPSBOc3R1ZGllcyksIHNoYXBlID0gMjEsIGFscGhhID0gLjgpICsKICBjb29yZF9maXhlZCgxLjMsIHlsaW0gPSBjKDI1LCA0NSksIHhsaW0gPSBjKDEyNSwgMTQ1KSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogIHBhbmVsX2JvcmRlcihjb2xvciA9ICJncmV5Iiwgc2l6ZSA9IC41KQoKIyBldXJvcGUKbTIgPC0gbSArIAogIGdlb21fcG9seWdvbihkYXRhID0gd29ybGQsIGFlcyhncm91cCA9IGdyb3VwKSwgY29sID0gImJsYWNrIiwgZmlsbCA9ICJncmV5OTAiLCBsd2QgPSAuMikgKwogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBOc3R1ZGllcywgZmlsbCA9IE5zdHVkaWVzKSwgc2hhcGUgPSAyMSwgYWxwaGEgPSAuOCkgKwogIGNvb3JkX2ZpeGVkKDEuMywgeWxpbSA9IGMoMzIsIDYwKSwgeGxpbSA9IGMoLTEwLCAzMCkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBwYW5lbF9ib3JkZXIoY29sb3IgPSAiZ3JleSIsIHNpemUgPSAuNSkKCiMgY29udGlndW91cyB1cwp1c2EgPSBtYXAoInN0YXRlIiwgcGxvdCA9IEZBTFNFLCBmaWxsID0gVFJVRSkgJT4lIGZvcnRpZnkoKSAjICJ1c2EiCgptMyA8LSBtICsgCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSB3b3JsZCwgYWVzKGdyb3VwID0gZ3JvdXApLCBjb2wgPSAiYmxhY2siLCBmaWxsID0gImdyZXk5MCIsIGx3ZCA9IC4yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSB1c2EsIGFlcyhncm91cCA9IGdyb3VwKSwgY29sID0gImJsYWNrIiwgZmlsbCA9ICJncmV5OTAiLCBsd2QgPSAuMikgKwogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBOc3R1ZGllcywgZmlsbCA9IE5zdHVkaWVzKSwgc2hhcGUgPSAyMSwgYWxwaGEgPSAuOCkgKwogIGNvb3JkX2ZpeGVkKDEuMywgeWxpbSA9IGMoMjUsIDQ5KSwgeGxpbSA9IGMoLTEyNywgLTY3KSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogIHBhbmVsX2JvcmRlcihjb2xvciA9ICJncmV5Iiwgc2l6ZSA9IC41KQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD01LjUsIGNhY2hlPVRSVUV9CmJvdHRvbV9yb3cgPC0gcGxvdF9ncmlkKG0zLCBtMiwgbTEsIGxlZ2VuZCwgbnJvdyA9IDEsIHJlbF93aWR0aHMgPSBjKDIsIDEuMTgsIC44NSwgLjUpKQpwbG90X2dyaWQobXgsIGJvdHRvbV9yb3csIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMi40LCAxKSkgKwogIHRoZW1lKHBsb3QubWFyZ2luID0gdW5pdChjKC41LCAuNSwgMS41LCAuNSksICJjbSIpKQpgYGAKCmBgYHtyfQpnZ3NhdmUoIi4uL2dyYXBocy9tYXBfaW5zZXRzLnBkZiIsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNS41LCBzY2FsZSA9IDIpCmBgYAoKCioqKgoKIyBTZXNzaW9uIEluZm8KCmBgYHtyfQpzZXNzaW9uSW5mbygpCmBgYAo=